package com.itheima.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;

import com.itheima.mapper.EmpMapper;
import com.itheima.pojo.*;
import com.itheima.service.EmpExprService;
import com.itheima.service.EmpService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.time.LocalDateTime;
import java.util.List;

@Service
public class EmpServiceImpl extends ServiceImpl<EmpMapper, Emp> implements EmpService {
    @Autowired
    private EmpExprService empExprService;
    @Autowired
    private EmpMapper empMapper;

    //之所以调用EmpExprService，是因为在EmpExprServiceImpl类中定义了更多方法，
    // 直接调用EmpExprMapper也是可以的(之前也是这样写的) 但是这个方法没有上面的方法多
    //private EmpExprMapper empExprMapper; //这样下面调用EmpExprMapper 插入工作经历时候就得换方法了


    @Override
    @Transactional(rollbackFor = Exception.class)
    public void saveEmp(Emp emp) {
        emp.setCreateTime(LocalDateTime.now());
        emp.setUpdateTime(LocalDateTime.now());
        emp.setPassword("123456");
        //mybatisplus里面,只要调用过save相关方法之后,这个对象就自动有id了
        this.save(emp);

        //其他代码
        //获取员工工作经历
        List<EmpExpr> exprList = emp.getExprList();
        //遍历工作经历  设置员工id
        if (exprList != null && exprList.size() > 0) {
            for (EmpExpr empExpr : exprList) {
                empExpr.setEmpId(emp.getId());
            }
            empExprService.saveBatch(exprList);
//            empExprMapper.insert(exprList);
        }
    }


    //根据id查询员工
    @Override
    public Emp getEmpById(Integer id) {
        Emp emp = this.getById(id);
        if(emp == null){
           throw new RuntimeException("数据不存在");
        }
        //查询工作经历 此时手里只有员工id
        //sql:select * from emp_expr where emp_id = ?
        List<EmpExpr> list = empExprService.list(new LambdaQueryWrapper<EmpExpr>().eq(EmpExpr::getEmpId, emp.getId()));
        emp.setExprList(list);
       return emp;
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void updateEmp(Emp emp) {
        //干什么?
        //1.修改员工
        //2.修改员工工作经历 ,但是这个工作经历是多条,所以一般是全删 再加
        emp.setUpdateTime(LocalDateTime.now());
        this.updateById(emp);
        //sql:delete from emp_expr where emp_id = ? 条件查询
        empExprService.remove(new LambdaQueryWrapper<EmpExpr>().eq(EmpExpr::getEmpId, emp.getId()));
        //设置id
        List<EmpExpr> exprList = emp.getExprList();
        if(exprList != null && exprList.size() > 0){
            for(EmpExpr empExpr : exprList){
                empExpr.setEmpId(emp.getId());
            }
            empExprService.saveBatch(exprList);
        }
    }

    //删除
    @Override
    public void deleteEmpByIds(List<Integer> ids) {
        //干啥事?? 删除员工 删除员工经历
        this.removeByIds(ids);
        //sql : delete from emp_expr where emp_id in (?,?,?)
        empExprService.remove(new LambdaQueryWrapper<EmpExpr>().in(EmpExpr::getEmpId,ids));

    }




    //统计员工性别
    @Override
    public List<GenderData> getEmpGenderDataStatistics() {
        List<GenderData> empGenderData = empMapper.getEmpGenderDataStatistics();
        return empGenderData;
    }

}
